package Login;

import wiziqi.GameFace;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.util.Map;

//1.定义Login类，
public class login {
	public static final String OBJ_PATH = "D:" + File.separator + "siyou5g" + File.separator + "CardUtil.obj";
	public static CardUtil cardUtil;
	public static MobileCard loginUser;
	//实例化JButton组件
	JButton button1=new JButton();
	JButton button2=new JButton();
	JTextField textName;
	JPasswordField textword;
	JFrame frame = new JFrame();


	{
		CardUtil cardUtil = readData();//开机时尝试读取数据
		this.cardUtil = cardUtil == null ? new CardUtil() : cardUtil;
	}

/*	 // 1.在类中定义主函数
	public static void main(String[] args) {
		// 2.在主函数中，实例化Login类的对象，调用初始化界面的方法。
		Login login = new Login();
		login.initUI();
	}*/
	public void initUI() {
		frame.setTitle("Login");
		frame.setSize(600, 650);
		frame.setDefaultCloseOperation(3);
		// 设置窗体相对于另一个组件的居中位置，参数null表示窗体相对于屏幕的中央位置
		frame.setLocationRelativeTo(null);
		// 设置禁止调整窗体大小
		frame.setResizable(false);
 
		// 实例化FlowLayout流式布局类的对象，指定对齐方式为居中对齐，组件之间的间隔为5个像素
		FlowLayout fl = new FlowLayout(FlowLayout.CENTER, 10, 10);
		// 实例化流式布局类的对象
		frame.setLayout(fl);
 
		// 5.实例化元素组件对象
		ImageIcon icon = new ImageIcon("./src/images/beijing.jfif");
		// 用标签来接收图片
		JLabel labIcon = new JLabel(icon);
		//设置标签大小
		//labIcon.setSize(30,20);setSize方法只对窗体有效，如果想设置组件的大小只能用
		Dimension dim = new Dimension(600,300);
		labIcon.setPreferredSize(dim);
		frame.add(labIcon);

		JLabel labName = new JLabel("账号：");
		labName.setFont(new Font("楷体", Font.BOLD, 25));
		frame.add(labName);
 

		textName = new JTextField();
		textName.setFont(new Font("楷体", Font.BOLD, 25));
		Dimension dime = new Dimension(450,30);
		//textName.setSize(dim);//setSize这方法只对顶级容器有效，其他组件使用无效。
		textName.setPreferredSize(dime);//设置除顶级容器组件其他组件的大小
		// 将textName标签添加到窗体上
		frame.add(textName);

		JLabel labpass= new JLabel("密码：");
		labpass.setFont(new Font("楷体", Font.BOLD, 25));
		frame.add(labpass);
		

		textword=new JPasswordField();
		textword.setFont(new Font("楷体", Font.BOLD, 25));
		//设置大小
		textword.setPreferredSize(dime);//设置组件大小
		frame.add(textword);

		//设置按钮的显示内容
		Dimension dim1 = new Dimension(100,30);
		Dimension dim2 = new Dimension(100,30);
		button1.setText("注册");
		button1.setFont(new Font("楷体", Font.BOLD, 25));
		button2.setText("登录");
		button2.setFont(new Font("楷体", Font.BOLD, 25));
		//设置按钮的大小
		button1.setSize(dim1);
		button2.setSize(dim2);
		frame.add(button1);
		frame.add(button2);
		init();
		frame.setVisible(true);// 设置窗体为可见
	}
	public void init() {
			button1.addActionListener(new ActionListener() {//添加监听器
				//将用户名和密码写入文件中的操作
				@Override
				public void actionPerformed(ActionEvent e) {
					new zhuce().initUI();
				}
			});
		button2.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				//对用户名和密码进行匹配
				Map<String, MobileCard> cards = cardUtil.cards;
				MobileCard card = cards.get(textName.getText());
				try {
					if (card!=null&&card.passWord.equals(String.valueOf(textword.getPassword()))) {
						JOptionPane.showMessageDialog(null, "登录成功！");
						loginUser=card;
						new GameFace().init();
					}else {
						JOptionPane.showMessageDialog(null, "用户名或者密码错误，登录失败！");
					}
				} catch (HeadlessException ex) {
					ex.printStackTrace();
				}
			}
		});
	}
	//保存对象到文件（序列化）
	public static void saveData() {
		ObjectOutputStream oos = null;
		try {
			//创建目录以及文件
			File file = MyFile.createDirAndFile(OBJ_PATH);
			//创建输出流
			FileOutputStream fos = new FileOutputStream(file);
			oos = new ObjectOutputStream(fos);
			oos.writeObject(cardUtil);//写出对象数据（序列化）
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				oos.close();//关流，装饰者模式，只需关外层的
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	//从文件读取对象（反序列化）
	public static CardUtil readData() {
		ObjectInputStream ois = null;
		try {
			//尝试获取目标文件对象，不存在则创建文件
			File file = MyFile.createDirAndFile(OBJ_PATH);
			//创建输入流
			FileInputStream fis = new FileInputStream(file);
			ois = new ObjectInputStream(fis);
			Object o = ois.readObject();//尝试读取一个对象（反序列化）
			if (o instanceof CardUtil)//若读取的是CardUtil，返回该对象引用
				return (CardUtil) o;
		} catch (Exception e) {//捕获异常后不做任何处理，后续直接用内存中数据
		} finally {
			try {
				if (ois != null)
					ois.close();//关流，装饰者模式，只需关外层的
			} catch (Exception e) {
			}
		}
		return null;
	}
}